from threading import Thread
from threading import Lock


# 互斥锁
# 多线程对同一数据进行读写操作的时候，需要进行数据同步，保证数据访问的安全性
mutex = Lock()

my_sum = 0


def sum_func(start, end):
    global my_sum
    for i in range(start, end):
        # 将数据读写部分加锁
        mutex.acquire()
        my_sum += i
        mutex.release()


def run_thread():
    t1 = Thread(target=sum_func, args=(1, 5000000))
    t2 = Thread(target=sum_func, args=(5000000, 10000000))
    # 产生资源竞争
    # 加法运算的底层：
    #        1.取出my_sum值  -->  2.my_sum加一运算  -->  3.新值写回my_sum内存
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    print(my_sum)


if __name__ == "__main__":
    run_thread()
